\chapter{Inleiding}
\label{Inleiding}

De laatste jaren is het internet steeds dynamischer geworden. Dit dynamisch aspect, waarbij gebruikers mee de inhoud bepalen van websites, heeft het internet duidelijk een extra waarde gegeven. Het internet wordt dagelijks door een enorm publiek bezocht en dit aantal groeit nog steeds. 
JavaScript heeft hierbij een grote rol gespeeld. Javascript is een programmeertaal die toelaat om code uit te voeren op de client side, wat webapplicaties interactiever maakt en zorgt voor een betere gebruikerservaring. JavaScript is ook een van de technologie\"en die geleidt heeft tot web mashups. Onder web mashups verstaan we de web applicaties die data en functionaliteit van verschillende websites combineren. Deze extra functionaliteit is interessant als concept voor zowel gebruiker als ontwikkelaar. Helaas kan dit in de realiteit veel minder interessant zijn omwille van de veiligheid. Door externe code in de hosting pagina in te laden, opent de hosting site zichzelf voor aanvallen via JavaScript libraries en/of APIs. Met andere woorden, elke component heeft mede de controle over de hosting pagina. Om dit te vermijden, moet de hosting pagina beperkingen doorvoeren op het gedrag van de code die ingeladen wordt.

De externe componenten moeten enkel de functionaliteiten van JavaScript kunnen gebruiken die ze nodig hebben om hun taken uit te voeren. 
Of zelfs enkel de taken waarvoor de component eigenlijk ge\"integreerd is in de mashup. Men noemt dit het least-privilege principe. Hierbij krijgt elke component enkel toegang tot het minimum aan functionaliteiten die nodig zijn om zijn taak op een succesvolle manier te kunnen uitvoeren. De nood aan least-privilege integratie van componenten is sterk gegroeid sinds de komst van de nieuwe HTML5 APIs \cite{html5}. 

In hoofdstuk \ref{HuidigeTechnieken} worden enkele belangrijke bestaande technieken besproken om componenten te integreren. Sommige van deze technieken zijn al heel geavanceerd en staan toe om componenten op een least-privilege (of gelijkaardige) manier te integreren. Echter staan deze technieken nog niet helemaal op punt en is het nodig om code te herschrijven (Caja \cite{caja}, FBJS \cite{fbjs}) of zijn er browser aanpassingen nodig (Conscript \cite{conscript}, Webjail \cite{webjail}).
\pagebreak
In deze thesis zal een nieuwe client-side architectuur voorgesteld worden, die least-privilege integratie van componenten zal toelaten, 
zonder de gekende nadelen van de huidige technieken. Daarbij zullen we ook een implementatie maken, dat dient als proof-of-concept.
De functionaliteiten waartoe een component toegang krijgt, zal door de hosting pagina moeten beschreven worden in een security policy.

De thesis heet Narcissus-gebaseerde beveiligingsarchitectuur voor JavaScript en situeert zich in het domein van web security.
Deze naam is gekozen omdat er in de implementatie gebruik gemaakt wordt van Narcissus. 
Narcissus is een JavaScript interpreter geschreven in JavaScript. 
Buiten de implementatie zal er in hoofdstuk \ref{Narcissus} ook een analyse gemaakt worden van deze JavaScript interpreter.

In het kort zijn de bijdragen van onze thesis:
\begin{enumerate}
  \item{\bf Evaluatie Narcissus} -  Een bestaand JavaScript test framework is zo omgebouwd dat het gebruikt kan worden om Narcissus te testen.
  \item{\bf Patching Narcissus} - Enkele onderzochte problemen in Narcissus zijn opgelost. In deze thesis beschrijven we kort de belangrijkste.
  \item{\bf Ontwerp Architectuur} - Een nieuwe client-side architectuur voorstellen, die least-privilege integratie van componenten mogelijk maakt, zonder dat hierbij code herschreven moet worden of dat er browser aanpassingen nodig zijn.
  \item{\bf Implementatie Prototype} - De implementatie van het prototype waarbij Narcissus gebruikt wordt. De implementatie wordt nog aangevuld met een evaluatie van de performantie en de veiligheid.
\end{enumerate}

Het vervolg van deze thesis is als volgt gestructureerd. In hoofdstuk \ref{Achtergrond} wordt de nodige achtergrondinformatie gegeven, om een beter beeld te vormen van de huidige situatie op het web en de laatste trends. 
Dit geeft aanleiding tot de probleemstelling in hoofdstuk \ref{Probleemstelling}, waar in hetzelfde hoofdstuk ook de doelstellingen worden besproken. De nieuwe architectuur wordt voorgesteld en uitgelegd in hoofdstuk \ref{Architectuur}. 
Voor de implementatie maken we, zoals vermeld, gebruik van Narcissus. Narcissus wordt beschreven in hoofdstuk \ref{Narcissus},
dit is een belangrijk stuk van de thesis. De testresultaten van Narcissus zullen er besproken worden alsook de geschiktheid/bruikbaarheid ervan. Daarna wordt de implementatie toegelicht in hoofdstuk \ref{ImplementatiePrototype}. In hoofdstuk \ref{Evaluatie} zal de beveiliging en de performantie van het prototype ge\"evalueerd worden. 
Om af te sluiten is er een conclusie met een terugblik op de vooropgestelde doelstellingen in hoofdstuk \ref{Besluit}.